package com.controleFamiliar.dao;

import org.hibernate.Query;
import org.hibernate.Session;
import org.omg.CORBA.portable.ApplicationException;

import com.controleFamiliar.pojo.Usuario;
import com.controleFamiliar.util.HibernateUtil;

public class UsuarioDAO extends GenericDAO<Long, Usuario>{
	
//	private static Logger log = Logger.getLogger(AlunoHibernateDAO.class);
	
	public Usuario localizarUsuarioPorEmail(String email) throws ApplicationException{
		Usuario usuario = new Usuario();
		try{			
			Session session = HibernateUtil.getSessionFactory().openSession();
			StringBuilder sb = new StringBuilder();
			sb.append("FROM Usuario u ");
			sb.append(" WHERE email = :email ");
			
			Query q = session.createQuery(sb.toString());
			q.setString("email", email);
			usuario = (Usuario) q.uniqueResult();
		}catch (Exception e) {
//			throw new ApplicationException("Erro", e);
		}finally{
			try{
				HibernateUtil.getSessionFactory().close();
			}catch (Exception e) {
//				log.error("Problemas ao fechar conexão com banco de dados.");
			}
		}
		return usuario;
	}
	
	public void salvarAcesso(Long codUsuario, boolean sucesso) throws Exception {
		try{
			Session session = HibernateUtil.getSessionFactory().openSession();
			StringBuilder sb = new StringBuilder();
			sb.append("INSERT INTO tb_acesso (codusuario, dataacesso, sucesso) "  + 
		             "VALUES (:codUsuario, CURRENT_TIMESTAMP, :sucesso)");
			Query query = session.createSQLQuery(sb.toString());
			query.setParameter("codUsuario", codUsuario);
			query.setParameter("sucesso", sucesso);
			int result = query.executeUpdate();
			System.out.println("Rows affected: " + result);
		}catch (Exception e) {
//			throw new ApplicationException("Erro", e);
		}finally{
			try{
				HibernateUtil.getSessionFactory().close();
			}catch (Exception e) {
//				log.error("Problemas ao fechar conexão com banco de dados.");
			}
		}
	}

}
